package com.deer.wms.base.system.service.zh;

import com.deer.wms.base.system.model.box.BoxItemDto;
import com.deer.wms.base.system.model.task.TaskInfo;
import com.deer.wms.base.system.model.task.TaskInfoDto;
import com.deer.wms.base.system.model.ware.CellInfo;
import com.deer.wms.base.system.model.ware.CellInfoDto;
import com.deer.wms.base.system.model.zh.WorkTasks;
import com.deer.wms.base.system.util.JedisServiceUtil;

import java.util.List;

/**WCS工作任务*/
public interface WorkTasksService {
    /*新增入库作业记录*/
    void insertBillInWorkTasks(TaskInfo taskInfo);
    /*查库位*/
    List<CellInfo> selectCellCodeFrom();
    //小于200
    List<CellInfo> selectCellCodeFromLittle();
    //大于200
    List<CellInfo> selectCellCodeFromBig();

    /*更新task*/
    void saveWorkTaskByTaskNumber(TaskInfo taskInfo);
    /*保存库位状态3*/
    void saveCell3(Integer cellId);
    /*保存库位状态1*/
    void saveCell1(Integer cellId);
    /*保存库位状态0*/
    void saveCell0(Integer cellId);
    /*根据批号查找任务作业*/
    List<TaskInfoDto> findTaskWorkByBatch(WorkTasks workTasks);
    /*根据id添加任务号*/
    void saveBillInWorkTasksById(TaskInfo taskInfo);
    /*查询货位*/
    List<CellInfoDto> selectCellCodeFromByitemCode(WorkTasks workTasks);
    /*添加出库任务*/
    void insertBillOutWorkTasks(TaskInfoDto taskInfoDto);
    /*根据托盘编码更改任务作业*/
    int updateStateByBatch(WorkTasks workTasks);
    /*库存状态改为线边仓*/
    void updateStateByBoxCode(WorkTasks workTasks);
    /*创建任务号*/
    Long getTaskNumber();
    /*创建入库单号*/
    Long getBillInNumber();
    /*创建出库单号*/
    Long getBillOutNumber();
    /*创建计划单号*/
    Long getPlanNumber();
    /*根据任务号查托盘*/
    BoxItemDto selectBoxMSGByTaskNumber(Long taskNumber);
    /*根据条码找任务号*/
    List<Long> findTaskNumberByBatch(String batch);
    /*判断Msg里唯一流水批号是否重复,如果重复则返回异常*/
    List<String> findDetailItemByBatch(WorkTasks workTasks);
    /*异常任务添加任务号*/
    void updateTaskNumber(Long taskNumber);
    /*入库任务改为出库任务*/
    int updateWorkTasksById(TaskInfoDto taskInfoDto);
    /*储存任务号*/
    void insertTaskNumber(long taskNumber);
    /*查询任务库位id*/
    CellInfoDto findCellIdByTaskNumber(Long taskNumber);
    /*更改库位id为0*/
    void updateCell(Integer cellId);
    /*判断目标库位是否空闲*/
    CellInfo findCellStateByCode(BoxItemDto boxItemDto);
    /*查询托盘信息*/
    BoxItemDto findBoxItemById(Long id);
    /*移库旧库位改为空闲状态*/
    void updateCellState(String cellCode);
    /*锁定新库位*/
    void updateCell1(String cellCode);
    /*查询任务作业*/
    TaskInfo selectWorkTask(Long taskNumber);
    /*删除任务*/
    void deleteWorkTask(TaskInfo taskInfo);
    /*创建任务历史*/
    void insertWorkTaskOld(TaskInfo taskInfo);
    /*查托盘和出库类型*/
    TaskInfo findOutType(Long taskNumber);
    /*删除已出库托盘*/
    void delByBoxCode(String boxCode);
    /*根据任务号查询id*/
    int findItemId(Long taskNumber);
    /*分配最高层*/
    List<CellInfo> selectCellCodeFromHeight();
    /*保存明细id*/
    void saveDetailId(Integer id, Integer billInDetailId);
}
